package com.xygz.orm.table;

import java.lang.reflect.Field;
import java.util.List;
import java.util.Map;

/**
 * the description for class _Table
 *
 * @author xiyuan-lgz 2023-09-18 @version v1.0.0 新建与整理
 */
@SuppressWarnings("all")
public interface ZTable {
    /**
     * 获取表名称
     *
     * @return 表名称
     */
    public String getTableName();
    
    /**
     * 获取表 列信息
     *
     * @return 列信息
     */
    public Map<String, ? extends ZTableField> getColumns();
    
    /**
     * 获取表列数量
     * @return
     */
    public int getColumnCount();
    
    
    List<? extends ZTableField> getPrimaryKeys();
    
    /**
     * 获取一个列信息
     *
     * @param column 列名
     * @return 列信息
     */
    public <C extends ZTableField> C getColumn(String column);
    
    /**
     * 尽可能使用表明精确获取字段信息
     *
     * @param tableName 表名
     * @param column    列名
     * @param <C>
     * @return
     */
    public <C extends ZTableField> C getColumn(String tableName, String column);
    
    /**
     * 通过字段 获取列信息
     *
     * @param field 属性
     * @return 列信息
     */
    public <C extends ZTableField> C getColumn(Field field);
    
    /**
     * 表索引
     *
     * @return 索引信息
     */
    public Map<String, ZTableIndex> getIndexes();
    
    /**
     * 表注释
     *
     * @return 表注释
     */
    public String getComment();
    
    /**
     * 获取Java映射实体类类型
     *
     * @return 实体类类型，返回值可能 为 null
     */
    public Class getJavaType();
}
